/* Title: Ease equations library.

   Ported to AS3 by Ivan Sanchez.

   Written by rlyeh, for VirtualToys (c) 2008.

   Based on previous work by Robert Penner, Jesus Gollonet and Tomas Cepeda.

   Please check readme for licensing and other conditions. 

  //#warning complete with http://snippets.dzone.com/posts/show/4005
  //#warning complete with http://www.gizma.com/easing/#quint3
  //#warning complete with http://giancarlo.dimassa.net/2007/07/11/elastic-and-bouncing-transitions-in-scriptaculous/
  //#warning complete with http://www.reflektions.com/miniml/template_archives_cat.asp?cat=17

   History:
   
   v1.0 - (13-Oct-08)   Initial version 
   
   
   Visualizations:
   
  //                                   linear_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - *******+  - 
  //    |                                                      *******       |    
  //    |                                               ***+***              |    
  //    |                                       ********   |                 |    
  //    |                                *+*****           |                 |    
  //    |                         ******* |                |                 |    
  //    |                  *******        |                |                 |    
  //d   |          ******+*               |                |                 |    
  //e   |   *******      |0.25            |0.50            |0.75             |1.00
  //l 0-+***-------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   quadIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  ***+  - 
  //    |                                                             ****   |    
  //    |                                                         ****       |    
  //    |                                                    *****           |    
  //    |                                               ***+*                |    
  //    |                                         ******   |                 |    
  //    |                                   ******         |                 |    
  //d   |                           ******+*               |                 |    
  //e   |               *+**********      |0.50            |0.75             |1.00
  //l 0-+***************-+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  quadOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ****+*****************+  - 
  //    |                                     *********    |                 |    
  //    |                              ***+***             |                 |    
  //    |                        ******   |                |                 |    
  //    |                  ******         |                |                 |    
  //    |              **+*               |                |                 |    
  //    |         *****  |                |                |                 |    
  //d   |     ****       |                |                |                 |    
  //e   | ****           |0.25            |0.50            |0.75             |1.00
  //l 0-+*---------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                quadInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  ***************+  - 
  //    |                                              ****+**               |    
  //    |                                         *****    |                 |    
  //    |                                     ****         |                 |    
  //    |                                 +***             |                 |    
  //    |                             ****|                |                 |    
  //    |                         ****    |                |                 |    
  //d   |                   ******        |                |                 |    
  //e   |           *****+**25            |0.50            |0.75             |1.00
  //l 0-+***********-----+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  cubicIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**+  - 
  //    |                                                               ***  |    
  //    |                                                            ***     |    
  //    |                                                         ***        |    
  //    |                                                     ****           |    
  //    |                                                 *+**               |    
  //    |                                            ***** |                 |    
  //d   |                                     *******      |                 |    
  //e   |                 0.25    ********+***0            |0.75             |1.00
  //l 0-+****************+********--------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                 cubicOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -**************+*****************+  - 
  //    |                           ******+**              |                 |    
  //    |                      *****      |                |                 |    
  //    |                 *****           |                |                 |    
  //    |             ***+                |                |                 |    
  //    |         ****   |                |                |                 |    
  //    |      ***       |                |                |                 |    
  //d   |   ***          |                |                |                 |    
  //e   | **             |0.25            |0.50            |0.75             |1.00
  //l 0-+*---------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                               cubicInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**+*****************+  - 
  //    |                                           *****  |                 |    
  //    |                                       ****       |                 |    
  //    |                                    ***           |                 |    
  //    |                                 +**              |                 |    
  //    |                               **|                |                 |    
  //    |                           ****  |                |                 |    
  //d   |                       ****      |                |                 |    
  //e   |                +******          |0.50            |0.75             |1.00
  //l 0-+****************+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  quartIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - *+  - 
  //    |                                                                 ** |    
  //    |                                                              ***   |    
  //    |                                                            **      |    
  //    |                                                         ***        |    
  //    |                                                     ****           |    
  //    |                                                 *+**               |    
  //d   |                                           ****** |                 |    
  //e   |                 0.25            +*********       |0.75             |1.00
  //l 0-+****************+****************+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                 quartOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  ****+****************+*****************+  - 
  //    |                      *******    |                |                 |    
  //    |                 *****           |                |                 |    
  //    |             ***+                |                |                 |    
  //    |          ***   |                |                |                 |    
  //    |       ***      |                |                |                 |    
  //    |     **         |                |                |                 |    
  //d   |  ***           |                |                |                 |    
  //e   |**              |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                               quartInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -*****+*****************+  - 
  //    |                                         ****     |                 |    
  //    |                                      ***         |                 |    
  //    |                                   ***            |                 |    
  //    |                                  *               |                 |    
  //    |                               **+                |                 |    
  //    |                             **  |                |                 |    
  //d   |                         ****    |                |                 |    
  //e   |                 0.******        |0.50            |0.75             |1.00
  //l 0-+****************+**--------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  quintIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - *+  - 
  //    |                                                                 ** |    
  //    |                                                               **   |    
  //    |                                                             **     |    
  //    |                                                           **       |    
  //    |                                                        ***         |    
  //    |                                                    ****            |    
  //d   |                                               ***+*                |    
  //e   |                 0.25             0.50*********   |0.75             |1.00
  //l 0-+****************+****************+****------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                 quintOut_01                                  
  // +1 |  -  -  -  -  -  -  -  - ********+****************+*****************+  - 
  //    |                  *******        |                |                 |    
  //    |              **+*               |                |                 |    
  //    |          ****  |                |                |                 |    
  //    |        **      |                |                |                 |    
  //    |      **        |                |                |                 |    
  //    |    **          |                |                |                 |    
  //d   |  **            |                |                |                 |    
  //e   |**              |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                               quintInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  - *******+*****************+  - 
  //    |                                       ****       |                 |    
  //    |                                     **           |                 |    
  //    |                                   **             |                 |    
  //    |                                  *               |                 |    
  //    |                                *+                |                 |    
  //    |                              ** |                |                 |    
  //d   |                           ***   |                |                 |    
  //e   |                 0.25******      |0.50            |0.75             |1.00
  //l 0-+****************+****------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   expoIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - *+  - 
  //    |                                                                  * |    
  //    |                                                                 *  |    
  //    |                                                               **   |    
  //    |                                                             **     |    
  //    |                                                           **       |    
  //    |                                                       ****         |    
  //d   |                                                  +****             |    
  //e   |                 0.25             0.50 ***********|0.75             |1.00
  //l 0-+****************+****************+*****-----------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  expoOut_01                                  
  // +1 |  -  -  -  -  -  -  - ***********+****************+*****************+  - 
  //    |               *+*****           |                |                 |    
  //    |           **** |                |                |                 |    
  //    |        ***     |                |                |                 |    
  //    |      **        |                |                |                 |    
  //    |    **          |                |                |                 |    
  //    |   *            |                |                |                 |    
  //d   | **             |                |                |                 |    
  //e   |*               |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                expoInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -********+*****************+  - 
  //    |                                      ****        |                 |    
  //    |                                    **            |                 |    
  //    |                                   *              |                 |    
  //    |                                  *               |                 |    
  //    |                                *+                |                 |    
  //    |                               * |                |                 |    
  //d   |                            ***  |                |                 |    
  //e   |                 0.25  *****     |0.50            |0.75             |1.00
  //l 0-+****************+******----------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   sineIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ****+  - 
  //    |                                                           *****    |    
  //    |                                                      *****         |    
  //    |                                                 *+***              |    
  //    |                                            ***** |                 |    
  //    |                                      ******      |                 |    
  //    |                                *+****            |                 |    
  //d   |                         ******* |                |                 |    
  //e   |              **+********        |0.50            |0.75             |1.00
  //l 0-+**************--+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  sineOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**+*****************+  - 
  //    |                                       *********  |                 |    
  //    |                                 +*****           |                 |    
  //    |                           ******|                |                 |    
  //    |                     ******      |                |                 |    
  //    |                +****            |                |                 |    
  //    |           *****|                |                |                 |    
  //d   |      *****     |                |                |                 |    
  //e   |  ****          |0.25            |0.50            |0.75             |1.00
  //l 0-+**--------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                sineInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**************+  - 
  //    |                                                **+***              |    
  //    |                                          ******  |                 |    
  //    |                                     *****        |                 |    
  //    |                                 +***             |                 |    
  //    |                            *****|                |                 |    
  //    |                       *****     |                |                 |    
  //d   |                 ******          |                |                 |    
  //e   |          ******+0.25            |0.50            |0.75             |1.00
  //l 0-+**********------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   circIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  +  - 
  //    |                                                                   *|    
  //    |                                                                 ** |    
  //    |                                                              ***   |    
  //    |                                                          ****      |    
  //    |                                                     *****          |    
  //    |                                              ****+**               |    
  //d   |                                     *********    |                 |    
  //e   |                 0.25 ***********+***0            |0.75             |1.00
  //l 0-+****************+*****-----------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  circOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  ************+*****************+  - 
  //    |                          *******+****            |                 |    
  //    |                  ********       |                |                 |    
  //    |            ****+*               |                |                 |    
  //    |        ****    |                |                |                 |    
  //    |    ****        |                |                |                 |    
  //    |  **            |                |                |                 |    
  //d   |**              |                |                |                 |    
  //e   |                |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                circInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  ***+*****************+  - 
  //    |                                        *******   |                 |    
  //    |                                    ****          |                 |    
  //    |                                  **              |                 |    
  //    |                                                  |                 |    
  //    |                                 +                |                 |    
  //    |                              ***|                |                 |    
  //d   |                         *****   |                |                 |    
  //e   |               *+********        |0.50            |0.75             |1.00
  //l 0-+***************-+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   backIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - *+  - 
  //    |                                                                 ** |    
  //    |                                                               **   |    
  //    |                                                             **     |    
  //    |                                                           **       |    
  //    |                                                         **         |    
  //    |                                                      ***           |    
  //d   |                                                  +***              |    
  //e   |                 0.25             0.50        ****|0.75             |1.00
  //l 0-+**************--+----------------+-----*******----+-----------------+----
  //t   |              **+****************+*****            3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                  backOut_01                                  
  // +1 |  -  -  -  -  -  -  *************+****************+*****************+  - 
  //    |                +***             |                |                 |    
  //    |             ***|                |                |                 |    
  //    |          ***   |                |                |                 |    
  //    |        **      |                |                |                 |    
  //    |      **        |                |                |                 |    
  //    |    **          |                |                |                 |    
  //d   |  **            |                |                |                 |    
  //e   |**              |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                backInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  *********+*****************+  - 
  //    |                                      ***         |                 |    
  //    |                                     *            |                 |    
  //    |                                   **             |                 |    
  //    |                                  *               |                 |    
  //    |                                *+                |                 |    
  //    |                               * |                |                 |    
  //d   |                             **  |                |                 |    
  //e   |                 0.25     ***    |0.50            |0.75             |1.00
  //l 0-+********--------+-----****-------+----------------+-----------------+----
  //t   |        ********+*****            PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                 bounceIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -********+  - 
  //    |                                                         ***        |    
  //    |                                                      ***           |    
  //    |                                                    **              |    
  //    |                                                  +*                |    
  //    |                                                 *|                 |    
  //    |                                               ** |                 |    
  //d   |                       **********+****       **   |                 |    
  //e   |          *****  0.2***          |0.50****  *     |0.75             |1.00
  //l 0-+**********-----*+***-------------+--------**------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                bounceOut_01                                  
  // +1 |  -  -  -  -  -  -  -  ***** -  -  -  -  -  -  ***+*****************+  - 
  //    |                      *     ****          *****   |                 |    
  //    |                    **          *+********        |                 |    
  //    |                   *             |                |                 |    
  //    |                 **              |                |                 |    
  //    |               *+                |                |                 |    
  //    |            *** |                |                |                 |    
  //d   |         ***    |                |                |                 |    
  //e   |     ****       |0.25            |0.50            |0.75             |1.00
  //l 0-+*****-----------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                              bounceInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -*****-  - *************+  - 
  //    |                                            *     +****             |    
  //    |                                          **      |                 |    
  //    |                                       ***        |                 |    
  //    |                               **+*****           |                 |    
  //    |                            ***  |                |                 |    
  //    |                         ***     |                |                 |    
  //d   |                        *        |                |                 |    
  //e   |          ******+***5 **         |0.50            |0.75             |1.00
  //l 0-+**********------+---**-----------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                elasticIn_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  +  - 
  //    |                                                                   *|    
  //    |                                                                    |    
  //    |                                                                  * |    
  //    |                                                                    |    
  //    |                                                                 *  |    
  //    |                                                                    |    
  //d   |                                                                *   |    
  //e   |                 0.25             0.50       *****+*.75             |1.00
  //l 0-+****************+****************+***********-----+-**---------*----+----
  //t   |                 PI/2             PI               3PI*4      *      2PI 
  //a   |                                                       **    *           
  //    |                                                         ** *            
  //    |                                                           *             
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                               elasticOut_01                                  
  // +1 |****************+****************+****************+*****************+  - 
  //    |                |                |                |                 |    
  //    |                |                |                |                 |    
  //    |                |                |                |                 |    
  //    |                |                |                |                 |    
  //    |                |                |                |                 |    
  //    |                |                |                |                 |    
  //d   |                |                |                |                 |    
  //e   |                |0.25            |0.50            |0.75             |1.00
  //l 0-+----------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                             elasticInOut_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  - *************+*****************+  - 
  //    |                                    *             |                 |    
  //    |                                   *              |                 |    
  //    |                                                  |                 |    
  //    |                                  *               |                 |    
  //    |                                 +                |                 |    
  //    |                                *|                |                 |    
  //d   |                               * |                |                 |    
  //e   |                 0.25            |0.50            |0.75             |1.00
  //l 0-+****************+*******-----**--+----------------+-----------------+----
  //t   |                 PI/2   *****     PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   sinPi2_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**+*****************+  - 
  //    |                                       *********  |                 |    
  //    |                                 +*****           |                 |    
  //    |                           ******|                |                 |    
  //    |                     ******      |                |                 |    
  //    |                +****            |                |                 |    
  //    |           *****|                |                |                 |    
  //d   |      *****     |                |                |                 |    
  //e   |  ****          |0.25            |0.50            |0.75             |1.00
  //l 0-+**--------------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                acelBreak_01                                  
  // +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -**************+  - 
  //    |                                                **+***              |    
  //    |                                          ******  |                 |    
  //    |                                     *****        |                 |    
  //    |                                 +***             |                 |    
  //    |                            *****|                |                 |    
  //    |                       *****     |                |                 |    
  //d   |                 ******          |                |                 |    
  //e   |          ******+0.25            |0.50            |0.75             |1.00
  //l 0-+**********------+----------------+----------------+-----------------+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   cos2Pi_11                                  
  // +1 +*****-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -*****+  - 
  //    |     **                                                      **     |    
  //    |       *                                                    *       |    
  //    |        **                                                **        |    
  //    |          *                                              *          |    
  //    |           **                                          **           |    
  //    |             *                                        *             |    
  //d   |              *                                      *              |    
  //e   |               * 0.25             0.50             0*75             |1.00
  //l 0-+----------------+----------------+----------------+*----------------+----
  //t   |                 *I/2            |PI              +3PI/4             2PI 
  //a   |                  **             |              **                       
  //    |                    *            |             *                         
  //    |                     *           |            *                          
  //    |                      **         |          **                           
  //    |                        *        |         *                             
  //    |                         **      |       **                              
  //    |                           **    |     **                                
  // -1 |  -  -  -  -  -  -  -  -  -  ****+*****  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   sin2Pi_00                                  
  // +1 |  -  -  -  -****+***** -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |         ***    |     **                                                 
  //    |        *       |       **                                               
  //    |      **        |         *                                              
  //    |     *          |          **                                            
  //    |    *           |            *                                           
  //    |  **            |             *                                          
  //d   | *              |              *                                         
  //e   |*               |0.25           * 0.50             0.75              1.00
  //l 0-+----------------+----------------+*---------------+-----------------+----
  //t   |                 PI/2             P*              |3PI/4           * 2PI 
  //a   |                                    *             |               *      
  //    |                                     *            |             **       
  //    |                                      *           |            *         
  //    |                                       **         |           *          
  //    |                                         *        |         **           
  //    |                                          **      |        *             
  //    |                                            **    |     ***              
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ****+*****-  -  -  -  -  - 
  //    |                                time                                     

  //                                    sinPi_00                                  
  // +1 |  -  -  -  -  -  -  -  -*********+**********-  -  -  -  -  -  -  -  -  - 
  //    |                   *****         |          *****                        
  //    |                +**              |               *+*                     
  //    |             ***|                |                | ***                  
  //    |          ***   |                |                |    ***               
  //    |        **      |                |                |       **             
  //    |     ***        |                |                |         ***          
  //d   |   **           |                |                |            **        
  //e   | **             |0.25            |0.50            |0.75          **  1.00
  //l 0-+*---------------+----------------+----------------+----------------*+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                 sinPi2Pi_10                                  
  // +1 +****************+***-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                |   *********                                            
  //    |                |            ****+*                                      
  //    |                |                | ******                                
  //    |                |                |       ******                          
  //    |                |                |             ***+*                     
  //    |                |                |                | *****                
  //d   |                |                |                |      *****           
  //e   |                |0.25            |0.50            |0.75       ****   1.00
  //l 0-+----------------+----------------+----------------+---------------**+----
  //t   |                 PI/2             PI               3PI/4             2PI 
  //a   |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  //    |                                                                         
  // -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     

  //                                   sin4Pi_00                                  
  // +1 |  -  -*****-  -  -  -  -  -  -  -  -  - *****  -  -  -  -  -  -  -  -  - 
  //    |    **     *                           *     *                           
  //    |            *                         *       *                          
  //    |   *                                 *         *                         
  //    |  *          *                                  *                        
  //    |              *                     *                                    
  //    | *                                 *             *                       
  //d   |*              *                                                         
  //e   |                 0.25             *.50            +0.75              1.00
  //l 0-+----------------+----------------+----------------+*----------------+----
  //t   |                 *I/2            +PI               3PI/4             2PI 
  //a   |                                                    *              *     
  //    |                  *             *                                 *      
  //    |                               *                     *                   
  //    |                   *                                  *          *       
  //    |                    *         *                                 *        
  //    |                     *       *                         *                 
  //    |                      *     *                           *     **         
  // -1 |  -  -  -  -  -  -  -  ***** -  -  -  -  -  -  -  -  -  -*****-  -  -  - 
  //    |                                time                                     

  //                                  sin3Pi4_00                                  
  // +1 |  -  -  ******-  -  -  -  -  -  -  -  -  -  -  -  -  -******  -  -  -  - 
  //    |      **      **                                    **      **           
  //    |     *          +                                  *          *          
  //    |    *           |*                                +            *         
  //    |   *            | *                              *|             *        
  //    |  *             |  *                            * |              *       
  //    | *              |   *                          *  |               *      
  //d   |                |                                 |                      
  //e   |*               |0.25*            0.50        *   |0.75            * 1.00
  //l 0-+----------------+-----*----------+-----------*----+-----------------+----
  //t   |                 PI/2  *         |PI        *      3PI/4             2PI 
  //a   |                                 |                                       
  //    |                        *        |         *                             
  //    |                         *       |        *                              
  //    |                          *      |       *                               
  //    |                           *     |      *                                
  //    |                            *    |     *                                 
  //    |                             **  |   **                                  
  // -1 |  -  -  -  -  -  -  -  -  -  - **+*** -  -  -  -  -  -  -  -  -  -  -  - 
  //    |                                time                                     
*/

package mge
{
  public class Ease
  {
    public static const linear_01:int = 0
    public static const quadIn_01:int = 1
    public static const quadOut_01:int = 2
    public static const quadInOut_01:int = 3
    public static const cubicIn_01:int = 4
    public static const cubicOut_01:int = 5
    public static const cubicInOut_01:int =6 
    public static const quartIn_01:int = 7
    public static const quartOut_01:int = 8
    public static const quartInOut_01:int = 9
    public static const quintIn_01:int = 10
    public static const quintOut_01:int = 11
    public static const quintInOut_01:int = 12
    public static const expoIn_01:int = 13
    public static const expoOut_01:int = 14
    public static const expoInOut_01:int = 15
    public static const sineIn_01:int = 16
    public static const sineOut_01:int = 17
    public static const sineInOut_01:int = 18
    public static const circIn_01:int = 19
    public static const circOut_01:int = 20
    public static const circInOut_01:int = 21
    public static const backIn_01:int = 22
    public static const backOut_01:int = 23
    public static const backInOut_01:int = 24
    public static const bounceIn_01:int = 25
    public static const bounceOut_01:int = 26
    public static const bounceInOut_01:int = 27
    public static const elasticIn_01:int = 28
    public static const elasticOut_01:int = 29
    public static const elasticInOut_01:int = 30  
    public static const sinPi2_01:int = 31
    public static const acelBreak_01:int =32 
    public static const cos2Pi_11:int = 33
    public static const sin2Pi_00:int = 34
    public static const sinPi_00:int = 35
    public static const sinPi2Pi_10:int = 36
    public static const sin4Pi_00:int = 37
    public static const sin3Pi4_00:int = 38
    
    public static const NUM_EASES:int = 39;
    
    public function Ease(type:int)
    {
      this.type = type;
    }
    
    public function delta(_t:Number, _d:Number):Number
    {
      t = _t;
      d = _d;
      
      if(t >= d)
      {
        /* this is an optimization */

        if(type >= sin2Pi_00)
          return 0;
          
        return 1;
      }
      
      var delta:Number;
      
      switch(type)
      {
        case linear_01: 
        {
          return t/d;
        }
        
        case sin2Pi_00:
        {
          delta = t/d;
          return Math.sin(delta * 2. * Math.PI);
        }
        
        case sinPi_00:
        {
          delta = t/d;
          return Math.sin(delta * Math.PI);
        }

        case sinPi2Pi_10:
        {
          delta = t/d;
          return Math.sin((0.5 * Math.PI) * (delta + 1));
        }

        case sin4Pi_00:
        {
          delta = t/d;
          return Math.sin(delta * 4. * Math.PI);
        }

        case sin3Pi4_00:
        {
          delta = t/d;
          return Math.sin(delta * 3. * Math.PI);
        }

        case sinPi2_01:
        {
          delta = t/d;
          return Math.sin(delta * 0.5 * Math.PI);
        }
        
        case acelBreak_01:
        {
          delta = t/d;
          return (Math.sin((delta * Math.PI) - (Math.PI * 0.5)) + 1.) * 0.5;
        }

        case cos2Pi_11:
        {
          delta = t/d;
          return Math.cos(delta * 2. * Math.PI);
        }


        case backIn_01: //?
        {
          var s:Number = 1.70158;
          postFix = t/=d;

          return (postFix)*t*((s+1)*t - s);
        }

        case backOut_01: //?
        {
          s = 1.70158;

          return Math.min(1, 1.*((t=t/d-1)*t*((s+1)*t + s) + 1));
        }

        case backInOut_01: //?
        {
          s = 1.70158;

          if ((t/=d/2.0) < 1.0)
            return Math.min(1, 1./2.*(t*t*(((s*=(1.52))+1)*t - s)));

          postFix = t-=2;

          return Math.min(1, 1./2*((postFix)*t*(((s*=(1.52))+1.)*t + s) + 2.));
        }
        
        case bounceIn_01: //?
        {
          t = d-t;

          bounce();
          
          return 1.0 - v;
        }
        
        case bounceOut_01: //?
        {          
          bounce();
          
          return v;
        }

        case bounceInOut_01: //?
        {          
          if (t < d/2)
          {
            t = t*2.;
            
            t = d-t;
            
            bounce();
            
            return (1 - v) * 0.5;
          }
          else 
          {
            t = t*2 -d;
            
            bounce();
            
            return v * 0.5 + 1.0*0.5;
          }
        }
        
        case circIn_01:
              t /= d;
              return 1.0 - Math.sqrt(1 - t*t);

            case circOut_01: //*
              t /= d;
              t--;
              return Math.sqrt(1 - t*t);

            case circInOut_01: //*
              t /= d/2;
              if(t < 1)
                return -1.0/2 * (Math.sqrt(1 - t*t) - 1);

              t-=2;

              return 1.0/2 * (Math.sqrt(1 - t*t) + 1);


            case elasticIn_01: //?
            {
              //if (t==0)
              //  return 0;

              t/=d;

              p=d*0.3;
              a=1.0;
              s=p/4;
              postFix =a*Math.pow(2,10*(t-=1)); // this is a fix, again, with post-increment operators

              return -(postFix * Math.sin((t*d-s)*(2*Math.PI)/p ));
            }

            case elasticOut_01: //?
            {
              //if (t==0)
              //  return 0;

              //if ((t/=d)==1)
              //  return 1.0;

              p=d*.3;
              a=1.0;
              s=p/4;

              return Math.min(1, (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + 1.0));
            }

            case elasticInOut_01: //?
            {
              //if (t==0)
              //  return 0;

              t/=d/2;
              //if ((t/=d/2)==2)
              //  return 1.0;

              p=d*(0.3*1.5);
              a=1.0;
              s=p/4;

              if (t < 1)
              {
                postFix =a*Math.pow(2,10*(t-=1)); // postIncrement is evil

                return Math.min(1, -.5*(postFix* Math.sin( (t*d-s)*(2*Math.PI)/p )));
              }

              postFix =  a*Math.pow(2,-10*(t-=1)); // postIncrement is evil

              return Math.min(1, postFix * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + 1.0);
            }



            case expoIn_01: //*
              return Math.pow(2, 10 * (t/d - 1));

            case expoOut_01: //*
              return 1.0 - ( t == d ? 0 : Math.pow(2.0, -10.0 * (t/d)));

            case expoInOut_01: //*

              //if( t == 0 ) //new
              //  ;//return 0.0;

              //if( t == d) //new
              //  return 1.0;

              t /= d/2;

              if (t < 1)
                return 1.0/2 * Math.pow(2, 10 * (t - 1));

              t--;

              return 1.0/2 * (-Math.pow(2, -10 * t) + 2);



            case quadIn_01: //*
              t /= d;
              return t*t;

            case quadOut_01: //*
              t /= d;
              return (2.0 - t) * t;

            case quadInOut_01: //*
              t /= d/2;

              if(t < 1)
                return (1.0/2*t*t);

              t--;

              return -1.0/2 * (t*(t-2) - 1);


            case cubicIn_01: //*
              t /= d;
              return t*t*t;

            case cubicOut_01: //*
              t /= d;
              t--;
              return (1.0 + t*t*t);

            case cubicInOut_01: //*
              t /= d/2;

              if (t < 1)
                return 1.0/2*t*t*t;

              t -= 2;

              return 1.0/2*(t*t*t + 2);



            case quartIn_01: //*
              t /= d;
              return t*t*t*t;

            case quartOut_01: //*
              t /= d;
              t--;
              return (1.0 - t*t*t*t);

            case quartInOut_01: //*

              t /= d/2;

              if(t < 1)
                return 1.0/2*t*t*t*t;

              t -= 2;

              return -1.0/2 * (t*t*t*t - 2);



            case quintIn_01: //*
              t /= d;
              return t*t*t*t*t;

            case quintOut_01: //*
              t /= d;
              t--;
              return (1.0 + t*t*t*t*t);

            case quintInOut_01: //*

              t /= d/2;

              if(t < 1)
                return 1.0/2*t*t*t*t*t;

              t -= 2;

              return 1.0/2*(t*t*t*t*t + 2);



            case sineIn_01: //*
              return 1.0 - Math.cos(t/d * (Math.PI/2));

            case sineOut_01: //*
              return Math.sin(t/d * (Math.PI/2));

            case sineInOut_01: //*
              return -1.0/2 * (Math.cos(Math.PI*t/d) - 1);
        
      } // switch
      
      
      return 0;
    }
    
    private function bounce():void
    {
      if ((t/=d) < (1.0/2.75))
      {
        v = 1.0*(7.5625*t*t);
      }
      else if (t < (2.0/2.75))
      {
        postFix = t-=(1.5/2.75);
       
        v = 1.0*(7.5625*(postFix)*t + 0.75);
      } 
      else if (t < (2.5/2.75)) 
      { 
        postFix = t-=(2.25/2.75); 
      
        v = 1.0*(7.5625*(postFix)*t + .9375); 
      } 
      else 
      { 
        postFix = t-=(2.625/2.75); 
      
        v = 1.0*(7.5625*(postFix)*t + 0.984375); 
      }
    }
    
    public function toString():String
    {
      var h_parts:int = 69;
      var v_parts:int = 20;
      var template:Vector.<String> = new Vector.<String>;
      
      template.push("// +1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//d   |                                                                     ");
      template.push("//e   |                                                                     ");
      template.push("//l 0-+----------------+----------------+----------------+-----------------+----");
      template.push("//t   |                                                                     ");
      template.push("//a   |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("//    |                                                                     ");
      template.push("// -1 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - "); 
      
      var ans:String;    
      
      for (var i:int = 0; i < Ease.NUM_EASES; i++)
      {
        ans += "graficoide: " + i + "\n";
        
        var line:Vector.<String> = new Vector.<String>;
        
        for (j = 0; j < template.length; j++)
          line.push(template[j]);
        
        var ease:Ease = new Ease(i);
        for (var j:int = 0; j < h_parts; j++)
        {
          var delta:Number = ease.delta(j, h_parts);
          if (delta < -1 || delta > 1)
            trace ("Error! " + "[" + i + "]" + "[" + j + "]" + delta);
          var x:int = 7 + j;
          var y:int = 10 - delta * 10 - 0.000001;
          
          if (y < 0) y = 0;
          if (y > 18) y = 18;
          
          var l:String = line[y].substr(0, x) + "*" + line[y].substr(x+1); 
          line[y] = l;
        }
        
        for (j = 0; j < line.length; j++)
          ans += line[j] + "\n";
          
        ans += "\n";
      }
      
      return ans;
      
    }
    
    private var t:Number;
    private var d:Number;
    private var v:Number;
    private var p:Number;
    private var a:Number;
    private var s:Number;
    private var postFix:Number;
    private var type:int;
    

  }
}